import BaseVenueProcessor from './BaseVenueProcessor.js';
import { getAiLiVenueSettings } from '../request.js';

/**
 * 爱力网球俱乐部场地数据处理器
 */
export class AiLiProcessor extends BaseVenueProcessor {
  constructor() {
    super();
    this.venueName = '爱力网球';
  }

  /**
   * 获取爱力网球俱乐部场地预约设置
   * @param {Object} params - 查询参数 { dateTime }
   * @returns {Promise} 请求Promise
   */
  async getVenueSettings(params = {}) {
    // 设置默认参数，userId和projectUid固定
    const defaultParams = {
      userId: 5900824,
      projectUid: "1751942352901414898",
      dateTime: "2025-08-20"
    };
    
    // 合并参数
    const requestData = { ...defaultParams, ...params };
    
    return await getAiLiVenueSettings(requestData);
  }

  /**
   * 验证数据是否有效
   * @param {Object} data - 原始场地数据
   * @returns {boolean} 数据是否有效
   */
  validateData(data) {
    // 处理两种不同的数据格式
    // 格式1: data包含result属性，result属性包含slots
    // 格式2: data直接包含slots
    const actualData = data.result || data;
    
    return actualData && 
           actualData.slots && 
           Array.isArray(actualData.slots) && 
           actualData.slots.length > 0;
  }

  /**
   * 按场地名称分组
   * @param {Object} data - 原始场地数据
   * @returns {Map} 场地Map
   */
  groupVenues(data) {
    const venueMap = new Map();
    
    // 处理两种不同的数据格式
    const actualData = data.result || data;
    
    // 根据实际数据中的场地名称创建场地
    actualData.slots.forEach(slot => {
      const venueName = slot.classRoomName || '爱力网球俱乐部';
      if (!venueMap.has(venueName)) {
        venueMap.set(venueName, {
          name: venueName,
          timeSlots: []
        });
      }
    });
    
    return venueMap;
  }

  /**
   * 处理时间槽
   * @param {Map} venueMap - 场地Map
   * @param {Object} data - 原始场地数据
   */
  processTimeSlots(venueMap, data) {
    // 处理两种不同的数据格式
    const actualData = data.result || data;
    
    // 遍历slots数组
    actualData.slots.forEach(slot => {
      const venueName = slot.classRoomName || '爱力网球俱乐部';
      const venue = venueMap.get(venueName);
      
      if (venue) {
        // 添加时间槽信息
        venue.timeSlots.push({
          time: this.formatTime(slot.beginDatetime),
          isFree: slot.status === 0, // status为0则可预约
          price: slot.cost || 0,
          beginDatetime: slot.beginDatetime,
          endDatetime: slot.endDatetime
        });
      }
    });
  }

  /**
   * 格式化时间
   * @param {string} datetime - 日期时间字符串
   * @returns {string} 格式化后的时间
   */
  formatTime(datetime) {
    if (!datetime) return '';
    
    // 将日期格式转换为iOS支持的格式
    const formatDateForIOS = (dateStr) => {
      if (!dateStr) return new Date();
      
      // 如果已经是ISO格式或支持的格式，直接使用
      if (dateStr.includes('T') || dateStr.includes('/')) {
        return new Date(dateStr);
      }
      
      // 将 "yyyy-MM-dd HH:mm:ss" 格式转换为 "yyyy/MM/dd HH:mm:ss"
      const formattedStr = dateStr.replace(/-/g, '/');
      return new Date(formattedStr);
    };
    
    const date = formatDateForIOS(datetime);
    const hours = date.getHours();
    let minutes = date.getMinutes();
    
    // 规范化分钟数：0-14分钟显示为00，15-44分钟显示为30，45-59分钟显示为下一小时的00
    if (minutes >= 45) {
      return `${(hours + 1).toString().padStart(2, '0')}:00`;
    } else if (minutes >= 15) {
      minutes = 30;
    } else {
      minutes = 0;
    }
    
    return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  }

  /**
   * 转换为场地列表
   * @param {Map} venueMap - 场地Map
   * @returns {Array} 场地列表
   */
  convertToVenueList(venueMap) {
    return Array.from(venueMap.values()).map((venue, index) => {
      // 根据场地名称设置不同的价格
      let price = 80; // 默认价格
      if (venue.name.includes('室内')) {
        price = 100;
      } else if (venue.name.includes('室外')) {
        price = 60;
      }
      
      return {
        id: 11000 + index, // 给爱力网球俱乐部场地分配新的ID
        name: venue.name,
        address: '东莞市南城区爱力网球中心',
        latitude: 23.0298,
        longitude: 113.7589,
        phone: '0769-67890123',
        rating: 4.8,
        price: price,
        facilities: ['室内场地', '专业教练', '器材租赁', '更衣室', '淋浴间', '停车场'],
        image: '',
        distance: 11.3,
        timeSlots: venue.timeSlots,
        dataSource: this.venueName
      };
    });
  }
/**
   * 处理场地数据
   * @param {Object} data - 原始场地数据
   * @returns {Array} 处理后的场地列表
   */
  process(data) {
    // 验证数据
    if (!this.validateData(data)) {
      console.warn('爱力网球俱乐部数据无效:', data);
      return [];
    }
    
    // 按场地名称分组
    const venueMap = this.groupVenues(data);
    
    // 处理时间槽
    this.processTimeSlots(venueMap, data);
    
    // 转换为场地列表
    return this.convertToVenueList(venueMap);
  }
}

export default AiLiProcessor;